perm filename CARNES.FAI[AER,HPM] blob
sn#210454 filedate 1976-04-11 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 TITLE CARNES
C00004 00003 AR2TAB: MOVEI T,44 TOTAL BITS/WORD
C00006 00004 CAR12: D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D
C00035 00005 END
C00036 ENDMK
C⊗;
TITLE CARNES
;FOR RECOGNIZING CARS
ENTRY VCAR
ENTRY CAR12,CARW12,CARH12
EXTERN CORGET,CORREL,SQRL
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BPTAB←←12
LINTAB←←13
T←1 ↔ TT←2 ↔ TTT←3 ↔ ARRY1←4 ↔ ARRY2←5 ↔ P←17
A←6 ↔ B←7 ↔ C←10 ↔ D←11 ↔ E←13 ↔ F←14 ↔ G←15
RETAD: 0
TEMP: BLOCK 50 ;TEMPORARY STORAGE FOR STUFF
AR2TAB: MOVEI T,44 ;TOTAL BITS/WORD
IDIV T,BYBI(ARRY2) ;BYTE SIZE
MOVEM T,WDBY(ARRY2) ;BYTES PER WORD
SUBI TT,44 ;-NUMBER OF USED BITS/WORD
MOVNM TT,WDBI(ARRY2) ;SAVED
ADD T,LNBY(ARRY2)
SUBI T,1
IDIV T,WDBY(ARRY2) ;NUMBER OF WORDS/SCANLINE
MOVEM T,LNWD(ARRY2)
MOVE TT,T ;WORDS/LINE
IMUL TT,WDBY(ARRY2) ;BYTES/WORD
MOVEM TT,LNBYA(ARRY2) ;GIVES BYTES/LINE, INCLUDING NULLS
IMUL TT,PCLN(ARRY2)
MOVEM TT,PCBYA(ARRY2) ;TOTAL BYTES/PIC, INCL. NULLS
IMUL T,PCLN(ARRY2) ;LINES IN THE PICTURE
MOVEM T,PCWD(ARRY2) ;WORDS IN THE PICTURE
MOVE T,LNBY(ARRY2)
IMUL T,PCLN(ARRY2)
MOVEM T,PCBY(ARRY2) ;BYTES/PIC, NOT INCL. NULLS
MOVEI T,14(ARRY2)
ADD T,PCLN(ARRY2)
MOVEM T,BPTAB(ARRY2) ;ADDRESS OF BYTE POINTER TABLE
ADD T,LNBYA(ARRY2) ;ADDR OF FIRST WORD IN PICTURE
MOVN TT,PCLN(ARRY2) ;SET UP CNTR FOR LINE ADDRESSES
HRL TT,TT
HRRI TT,LINTAB(ARRY2)
LTLP: MOVEM T,(TT) ;MAKE LINE TABLE
ADD T,LNWD(ARRY2)
AOBJN TT,LTLP
MOVN TT,BPTAB(ARRY2)
HRL TT,LNBYA(ARRY2) ;SET UP CNTR FOR BYTE TABLE
AOBJN TT, ;DECR ADDRESS AND INCR COUNT BY 1
MOVN TT,TT
MOVEI T,4400
ADD T,BYBI(ARRY2)
LSH T,6
HRLZ T,T
BYLP: MOVEM T,(TT) ;MAKE BYTE POINTER TABLE
IBP T
AOBJN TT,BYLP
POPJ P,
CAR12: D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ C ↔ C ↔ C ↔ C ↔ C ↔ A ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ C ↔ D
D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D
D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D
D ↔ C ↔ C ↔ A ↔ C ↔ C ↔ C ↔ C ↔ C ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ C ↔ D
D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D
D ↔ D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D ↔ D
D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D
CARHIG←←=26 ↔ CARWID←←=11
NOAS: 79.0
NOBS: 40.0
NOCS: 95.0
NODS: 72.0
CARH12: CARHIG
CARW12: CARWID
MAXBY: 31.0
MAXSQ: 961.0
X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D
CARM←←TEMP ↔ SHFT2←TEMP+1 ↔ AVCAR←←TEMP+2 ↔ AY2←←TEMP+3
BX1←←TEMP+4 ↔ BY1←←TEMP+5 ↔ BX2←←TEMP+6 ↔ BY2←←TEMP+7
SOUWIN←←TEMP+10 ↔ DESWIN←←TEMP+11 ↔ DEXSKP←←TEMP+12 ↔ DEYSKP←←TEMP+13
WSIZ1←←TEMP+14 ↔ DWSIZ←←TEMP+15 ↔ WSIZY1←←TEMP+16
SOUSIZ←←TEMP+20 ↔ WSIZ←←TEMP+21 ↔ DWSIZ←←TEMP+22 ↔ NEGXC←TEMP+23
MAXBYT←←TEMP+24 ↔ MAXBSQ←←TEMP+25
ASUM←←TEMP+26 ↔ ASQR←←TEMP+27
BSUM←←TEMP+30 ↔ BSQR←←TEMP+31
CSUM←←TEMP+32 ↔ CSQR←←TEMP+33
DSUM←←TEMP+34 ↔ DSQR←←TEMP+35
DEFINE FLOAT(N)
< TLC N,232000
FADR N,N >
OPDEF FIX[247000233000]
VCAR: POP P,RETAD
POP P,CARM
POP P,BX2 ;A CARRELATOR. FINDS THE BEST MATCH
POP P,BY2 ;TO A CAR
POP P,BX1 ;IN ARRY2(BX1:BY1,BX2:BY2)
POP P,BY1
POP P,ARRY2
MOVE X1,BX1
MOVE X2,BX2 ; VCAR(
MOVE Y1,BY1 ; PICT,BX1,BY1,BX2,BY2);
MOVE Y2,BY2
MOVEI T,5 ;TABLE)
SUB T,BYBI(ARRY2)
HRRZM T,SHFT2
MOVEI T,1
LSH T,5
SUBI T,1
MOVEM T,MAXBYT
IMUL T,T
MOVEM T,MAXBSQ
FIXB: CAMLE X1,X2 ;FIRST FIX UP THE LIMITS SO
EXCH X1,X2 ;X1≤X2, X1≥0 X2<WIDTH ETC.
CAIGE X1,0
MOVEI X1,0
MOVE T,LNBY(ARRY2)
CAML X2,T
MOVEI X2,-1(T)
CAMLE Y1,Y2 ;SIMILAR FOR Y
EXCH Y1,Y2
CAIGE Y1,0
MOVEI Y1,0
MOVE T,PCLN(ARRY2)
CAML Y2,T
MOVEI Y2,-1(T)
CAMG X1,X2
CAMLE Y1,Y2
JRST FIXB
MOVEM X1,BX1
MOVEM X2,BX2
MOVEM Y1,BY1
MOVEM Y2,BY2
MOVE T,BX2 ;QUIT IF DESTINATION WINDOW IS TOO SMALL
SUB T,BX1
SUBI T,CARWID
JUMPLE T,QUITR
MOVE T,BY2
SUB T,BY1
SUBI T,CARHIG
JUMPLE T,QUITR
THIS←←TT ↔ SIZ←←TTT
MOVEI X2,CARWID
MOVEI X1,=1
MOVEI Y2,CARHIG
MOVEI Y1,=1
MOVEI SIZ,1(X2) ;CALCULATE SIZE OF BUFFER AREA
SUB SIZ,X1 ;FOR THE SOURCE WINDOW CODE
MOVEM SIZ,WSIZ1 ;WILL BE X WINDOWSIZE-1
MOVEM SIZ,WSIZ ;IS X WINDOWSIZ
MOVNM SIZ,DEXSKP ;WILL BE DELTA XB - DELTA XA
MOVEI T,1(Y2)
SUB T,Y1
MOVEM T,WSIZY1 ;WILL BE X WINDOWSIZE-1
MOVNM T,DEYSKP ;WIL BE DELTA YB - DELTA YA
IMUL SIZ,T
MOVEM SIZ,SOUSIZ ;SOURCE WINDOW SIZE (IN PIXELS)
ASH SIZ,1
ADDI SIZ,1
PUSHJ P,CORGET ;AND MAKE THAT BUFFER
HALT
MOVEM THIS,SOUWIN
SUBI THIS,1
MOVN T,T
HRLZ T,T
HRRI T,LINTAB(ARRY1) ;Y COUNTER
ADD T,Y1
MOVE 0,BX2 ;FINISH UP MAKING DELTA XB -DELTA XA
SUB 0,BX1
ADDI 0,1
MOVEM 0,DWSIZ
ADDM 0,DEXSKP
MOVE 0,BY2 ;AND THE Y'S TOO
SUB 0,BY1
ADDI 0,1
ADDM 0,DEYSKP
SOS WSIZ1 ;NOT TO MENTION X WINDOWSIZ-1
SOS WSIZY1 ;AND Y WINDOWSIZ-1
MOVE G,[MOVE TT,0(T)]
MOVEI B,0
;DON'T FORGET! A,B,C,D ARE X1,X2,Y1,Y2 ALSO
;SET UP INNER
ILYLP: MOVE TTT,WSIZ ;"LOOP" OF THE CORRELATION
ILXLP: PUSH THIS,G ;A SEQUENCE OF
ADDI G,1 ; MOVE TT,POSB(T)
MOVE A,CAR12(B)
ADDI B,1
LSH A,27
ADD A,[ADD 0,SQRL(TT)]
PUSH THIS,A
SOJG TTT,ILXLP
ADD G,DEXSKP
AOBJN T,ILYLP
PUSH THIS,[JRST INRDON] ;AND THE FINAL INSTR.
MOVE X1,BX1 ;MAKE THE DESTINATION
MOVE X2,BX2 ;WINDOW BUFFER
MOVE Y1,BY1
MOVE Y2,BY2
MOVEI SIZ,1(X2)
SUB SIZ,X1
MOVEM SIZ,DWSIZ
MOVEI T,1(Y2)
SUB T,Y1
IMUL SIZ,T
PUSHJ P,CORGET
HALT
MOVEM THIS,DESWIN
SUBI THIS,1
MOVN T,T ;Y COUNTER
HRLZ T,T
HRRI T,LINTAB(ARRY2)
ADD T,Y1
MOVE E,BPTAB(ARRY2) ;BYTE POINTER SKELETON
ADDI E,-1(X1) ;FOR DESTINATION
MOVE E,(E)
BUYLP: MOVE F,E ;UNPACKS THE DESTINATION
ADD F,(T) ;WINDOW, ONE WORD/SAMPLE
MOVE TTT,DWSIZ
BUXLP: ILDB 0,F
LSH 0,@SHFT2 ;SHIFT TO 5 BITS
PUSH THIS,0
SOJG TTT,BUXLP
AOBJN T,BUYLP
SETZM AVCAR
MOVN B,DEXSKP ;NOW ACTUALLY CORRELATE
SUBI B,1
MOVEM B,NEGXC
MOVE E,CARM
SUBI E,1 ;SET UP POINTER FOR RESULTS
MOVE TTT,DEYSKP ;NUMBER OF ROWS
MOVE T,DESWIN ;WHERE TO START
CRYLP: HRL T,NEGXC ;INIT X CNTR, BUT KEEP OLD POSN
CRXLP: SETZB A,B ;ACCUMULATE CURRENT SUM IN A
SETZB C,D
JRST @SOUWIN ;JUMP TO PREVIOUSLY CREATED CODE
INRDON: MOVE F,A
ASH F,-24 ;SAVE SIGMA A
FLOAT(F)
FDVR F,NOAS
FDVR F,MAXBY
MOVEM F,ASUM ;AND SIGMA A↑2
TLZ A,777774
FLOAT(A)
FDVR A,NOAS
FDVR A,MAXSQ
MOVEM A,ASQR
MOVE F,B
ASH F,-24 ;SIGMAS FOR B ALSO
FLOAT(F)
FDVR F,NOBS
FDVR F,MAXBY
MOVEM F,BSUM
TLZ B,777774
FLOAT(B)
FDVR B,NOBS
FDVR B,MAXSQ
MOVEM B,BSQR
MOVE F,C
ASH F,-24 ;SIGMAS FOR C ALSO
FLOAT(F)
FDVR F,NOCS
FDVR F,MAXBY
MOVEM F,CSUM
TLZ C,777774
FLOAT(C)
FDVR C,NOCS
FDVR C,MAXSQ
MOVEM C,CSQR
MOVE F,D
ASH F,-24 ;SIGMAS FOR D ALSO
FLOAT(F)
FDVR F,NODS
FDVR F,MAXBY
MOVEM F,DSUM
TLZ D,777774
FLOAT(D)
FDVR D,NODS
FDVR D,MAXSQ
MOVEM D,DSQR
MOVE A,ASUM
FMPR A,A
FADR A,[0.0]
FSBR A,ASQR ;CALCULATE 1-(A-ABAR)↑2 BAR
MOVE B,BSUM ;CALCULATE 1-(B-BBAR)↑2 BAR
FMPR B,B
FADR B,[0.0]
FSBR A,BSQR
MOVE C,[0.0]
FSBR C,CSQR
FSBR C,CSQR
MOVE D,ASUM ;CALCULATE (DBAR-ABAR)↑2 BAR
FSBR D,DSUM
FMPR D,D
FADR A,B
FADR A,C
FDVR A,[4.0]
MOVN A,A
MOVE B,BSUM
FSBR B,DSUM
MOVM B,B
MOVE C,ASUM
FSBR C,DSUM
MOVM C,C
CAMGE B,C
MOVE B,C
MOVE C,CSUM
FSBR C,DSUM
MOVM C,C
CAMGE B,C
MOVE B,C
CAMG B,[0.1]
MOVN A,A
PUSH E,A ;WHICH WE STORE
FADRM A,AVCAR
AOBJN T,CRXLP ;SHIFT IN X, AND TRY AGAIN
ADD T,WSIZ1 ;ADD WHATS NEEDED TO GET TO NEXT
SOJGE TTT,CRYLP ;SCANLINE, AND TRY AGAIN
MOVE THIS,SOUWIN ;RETURN THE USED CORAGE
PUSHJ P,CORREL
MOVE THIS,DESWIN
PUSHJ P,CORREL
MOVE 1,AVCAR ;GET READY TO RETURN VALUE OF MATCH
QUITR: JRST @RETAD ;AND RETURN
END